package com.kichina.galaxy.dev.tools.excel.easyexcel;

import com.alibaba.excel.EasyExcel;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;



public class EasyExcelTest {

    static String path = "D:\\project\\personal\\Java\\meta_mall\\a测试文档\\poi\\";

    private List<DemoData> data() {
        List<DemoData> list = new ArrayList<DemoData>();
        for (int i = 0; i < 10; i++) {
            DemoData data = new DemoData();
            data.setString("字符串" + i);
            data.setDate(new Date());
            data.setDoubleData(0.56);
            list.add(data);
        }
        return list;
    }


    public  void test(String[] args) {

        // 写法1
        String fileName = path + "EasyExcel.xlsx";
        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        List<DemoData> data = data();
        //后来排查很久发现是easyExcel版本是2.2.3，我用的poi版本是3.9，导致有冲突，网上查3.17兼容，或则升级更高的4.1.2
        EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data);
    }

    // 最简单的写

    public void simpleWrite() {
        // 写法1
        String fileName = path + "EasyExcel.xlsx";
        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        List<DemoData> data = data();
        EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data);
    }

    // 最简单的读
    public void simpleRead() {
        String fileName = path + "测试文档.xlsx";
        // 这里 需要指定读用哪个class去读，然后读取第一个sheet 文件流会自动关闭
//        EasyExcel.read(fileName, ExcelModel.class, new DemoDataListener()).sheet().doRead();
    }

    /**
     * 读多个或者全部sheet,这里注意一个sheet不能读取多次，多次读取需要重新读取文件
     * <p>
     * 1. 创建excel对应的实体对象 参照{@link DemoData}
     * <p>
     * 2. 由于默认一行行的读取excel，所以需要创建excel一行一行的回调监听器，参照{@link DemoDataListener}
     * <p>
     * 3. 直接读即可
     */

//    public void repeatedRead() {
//        String fileName = path + "demo.xlsx";
//        // 读取全部sheet
//        // 这里需要注意 DemoDataListener的doAfterAllAnalysed 会在每个sheet读取完毕后调用一次。然后所有sheet都会往同一个DemoDataListener里面写
////        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).doReadAll();
//
//        // 读取部分sheet
//        fileName = path + "demo" + File.separator + "demo.xlsx";
//
//        // 写法1： 使用 try-with-resources @since 3.1.0
//        try (ExcelReader excelReader = EasyExcel.read(fileName).build()) {
//            // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
//            ReadSheet readSheet1 =
//                    EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
//            ReadSheet readSheet2 =
//                    EasyExcel.readSheet(1).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
//            // 这里注意 一定要把sheet1 sheet2 一起传进去，不然有个问题就是03版的excel 会读取多次，浪费性能
//            excelReader.read(readSheet1, readSheet2);
//        }catch (Exception e){
//
//        }
//
//        // 写法2： 不使用 try-with-resources
//        ExcelReader excelReader = null;
//        try {
//            excelReader = EasyExcel.read(fileName).build();
//
//            // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
//            ReadSheet readSheet1 =
//                    EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
//            ReadSheet readSheet2 =
//                    EasyExcel.readSheet(1).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
//            // 这里注意 一定要把sheet1 sheet2 一起传进去，不然有个问题就是03版的excel 会读取多次，浪费性能
//            excelReader.read(readSheet1, readSheet2);
//        } finally {
//            if (excelReader != null) {
//                // 这里千万别忘记关闭，读的时候会创建临时文件，到时磁盘会崩的
//                excelReader.close();
//            }
//        }
//    }

}
